package api

import (
	"encoding/json"
	"land/config"
	"land/models"
	"net/http"
)

// var jwtSecret = []byte("asdfghjkjhg") // 请确保将此秘钥更改为一个安全的随机值

// 用户登录处理函数

func LoginHandler(w http.ResponseWriter, r *http.Request) {

	config.AllowCors(w)

	if r.Method == http.MethodOptions {
		// 对预检请求返回 200
		w.WriteHeader(http.StatusOK)
		return
	}

	// 声明一个 loginReq 变量，用于存储解码后的登录请求数据。
	var loginReq models.LoginRequest
	if err := json.NewDecoder(r.Body).Decode(&loginReq); err != nil {
		http.Error(w, "无效的请求数据", http.StatusBadRequest)
		return
	}

	// 声明一个 user 变量，用于存储从数据库中查询的用户信息。
	var user models.User
	if err := config.Db.Where("username = ?", loginReq.Username).First(&user).Error; err != nil {
		http.Error(w, "用户不存在", http.StatusUnauthorized)
		return
	}
	// 验证数据库中查询到的用户密码是否与请求中的密码匹配。
	if user.Password != loginReq.Password {
		http.Error(w, "密码错误", http.StatusUnauthorized)
		return
	}

	//返回用户信息
	w.Header().Set("Content-Type", "application/json")
	response := map[string]interface{}{
		"uid":      user.ID,
		"username": user.Username,
		"userpic":  user.Userpic,
	}
	json.NewEncoder(w).Encode(response)
}

/*
func TokenValid(r *http.Request) (uint, error) {
	tokenStr := r.Header.Get("Authorization")
	if tokenStr == "" {
		return 0, fmt.Errorf("缺少 token")
	}

	// 去掉 "Bearer " 前缀
	tokenStr = strings.TrimSpace(tokenStr[len("Bearer "):])

	claims := &jwt.MapClaims{}
	token, err := jwt.ParseWithClaims(tokenStr, claims, func(token *jwt.Token) (interface{}, error) {
		return jwtSecret, nil
	})

	if err != nil || !token.Valid {
		fmt.Println(err)
		return 0, fmt.Errorf("无效的 token")
	}

	// 检查 Token 是否过期
	if exp, ok := (*claims)["exp"].(float64); ok {
		// 将过期时间转换为时间.Time
		expTime := time.Unix(int64(exp), 0)
		if expTime.Before(time.Now()) {
			return 0, fmt.Errorf("token 已过期")
		}
	} else {
		return 0, fmt.Errorf("token 中缺少过期时间")
	}

	uid, ok := (*claims)["uid"].(float64)
	if !ok {
		return 0, fmt.Errorf("无效的 uid")
	}
	return uint(uid), nil
}*/
